package org.zhadoop.streaming.exception;

/**
 * 流处理的基础异常
 * 流处理系统中，所有 异常均应该继承自这个异常，然后再按照类型不同，进行细分
 * <p/>
 * 该异常属于编译时异常，在CQL提交任务的时候就可以捕获到
 * 不同于StreamingRuntimeException，在编译时期无法主动捕获
 * @author zwd
 *
 */
public class StreamingException extends Exception{

	/**
	 * 
	 */
	private static final long serialVersionUID = -7953299480366989193L;
	
	/**
	 * 异常码
	 */
	private ErrorCode errorCode = null;
	
	public StreamingException(String message){
		super(message);
		errorCode = ErrorCode.UNKNOWN_ERROR;
	}
	
	public StreamingException(String message,Throwable cause){
		super(message,cause);
		errorCode = ErrorCode.UNKNOWN_ERROR;
	}
	
	public StreamingException(ErrorCode code,String... errorArgs) {
		this(null,code,errorArgs);
	}
	
	public StreamingException(Throwable cause, ErrorCode code, String... errorArgs) {
		super(code.getFullMessage(errorArgs),cause);
		errorCode = code;
	}
	
	/**
     * <默认构造函数>
     * 仅供内部warp函数使用
     *
     */
    protected StreamingException(Throwable cause, String fullMessage, ErrorCode code)
    {
        super(fullMessage, cause);
        this.errorCode = code;
    }
    
    /**
     * 包装StreamingException
     * @param exception
     * @return
     */
    public static StreamingException wrapException(Exception exception){
    	return new StreamingException(exception.getCause(),exception.getMessage(),ErrorCode.UNKNOWN_ERROR);
    }
    
    public ErrorCode getErrorCode(){
        return errorCode;
    }
   
}
